package cn.xerllent.quartz.job;

import java.text.SimpleDateFormat;

import javax.annotation.Resource;

import org.quartz.DisallowConcurrentExecution;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;


import cn.xerllent.system.service.LogService;
import lombok.extern.slf4j.Slf4j;

/**
 * 构建job,一定要继承org.springframework.scheduling.quartz.QuartzJobBean方法，DataMap数据才会通过set注入bean实体内，继承org.quartz.Job参数无注入;
 * org.springframework.scheduling.quartz.QuartzJobBean 只是解决了参数注入，其他没用
 * @DisalllowConcurrentExecution 作用是解决多边部署情况下、多线程情况下重复执行的问题。@Slf4j是guava提供的日志包
 * */
@Slf4j
@DisallowConcurrentExecution
public class TestJob2 extends QuartzJobBean {
	
	/**
	 * 自定义bean本身的日志类别type编号，
	 * 日志记录时，在servicebean的方法上加annotation，例如：@cn.xerllent.common.annotation.Log(value="Job任务执行",type=10)
	 * */
	public static final int logtype = 10;
	
	//@Autowired
	@Resource
	private LogService logService;
	
	private String a;
	private int b;
	

	public int getB() {
		return b;
	}


	public void setB(int b) {
		this.b = b;
	}


	public String getA() {
		return a;
	}

	public void setA(String a) {
		this.a = a;
	}

	/**
	 * 在此加切面方法aspect，没用,所以今后日志记录切面需要加到spring service bean的方法上，
	 * 例如：@cn.xerllent.common.annotation.Log(value="Job任务执行",type=10)
	 * */
	@Override
	protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String jobName = context.getJobDetail().getKey().toString();
        log.info(jobName + "任务开始执行：" + dateformat.format(System.currentTimeMillis()));
        // TODO 业务job1.job1
        log.info("------------a:"+a+"-------------------");
        log.info("------------b:"+b+"-------------------");
        Object logg = logService.findByErrDetail(5122L);
        log.info(logg.toString());
        log.info(jobName + "任务执行完成：" + dateformat.format(System.currentTimeMillis()));
	}
}
